package com.hh.jwtdemo.service;

import org.springframework.web.multipart.MultipartFile;

import java.io.OutputStream;

public interface SecureFileService {
    /**
     * 加密存储文件
     *
     * 该方法接收一个multipart文件作为输入，通过以下步骤进行处理：
     * 1. 生成一个唯一名称，以避免文件重名问题；
     * 2. 创建一个临时文件，并将上传的文件内容转移到这个临时文件中；
     * 3. 使用FileCryptoUtil工具类对临时文件进行加密，并将加密后的文件存储在目标位置；
     * 4. 删除临时文件，以清理资源；
     *
     * @param file 用户上传的multipart文件
     * @return 存储文件的唯一名称
     * @throws Exception 如果文件处理过程中发生错误，则抛出异常
     */
    public String storeFile(MultipartFile file) throws Exception;

    /**
     * 解密并加载文件到指定的输出流
     * 该方法首先根据提供的文件名定位到存储路径中的加密文件，然后将其解密到一个临时文件中
     * 最后，将解密后的临时文件内容传输到指定的输出流中，并在操作完成后删除临时文件
     *
     * @param fileName 要加载的文件名
     * @param outputStream 文件内容将被写入的输出流
     * @throws Exception 如果文件操作或解密过程中发生错误，则抛出异常
     */
    public void loadFile(String fileName, OutputStream outputStream) throws Exception;
}
